package day01;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

/**
 * @Author Stringzhua
 * @Date 2024/10/28 14:31
 * description:
 * 实现Runnable接口
 * <p>
 * 程序：程序是含有指令和数据的文件，被存储在磁盘或其他的数据存储设备中；
 * 进程：进程是程序的一次执行过程，是操作系统分配资源的最小单位
 * 线程：线程是系统进行调度执行的基本单位[最小执行单元]，系统会以线程为单位，执行程序指令；【线性执行】
 * <p>
 * 并发：同一个时间段，多个线程在同一个cpu上都在执行【单位时间内交替执行】
 * 并行：多个线程在不同的cpu上同时执行多个任务
 */
public class Test01 {
    public static void main(String[] args) {
        System.out.println("主线程开始");

        Thread mainThread = Thread.currentThread();
        mainThread.setName("main主线程");

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i < 26; i++) {
                    System.out.println("数字=" + i);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, "T数字线程");
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c = 'A'; c < 'Z'; c++) {
                    System.out.println("字母=" + c);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, "T字母线程");

        //启动子线程
        t1.start();
        t2.start();

        //打印JVM进程中的所有线程
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
        ThreadInfo[] threadInfoArray = threadMXBean.dumpAllThreads(true, true);
        for (ThreadInfo threadInfo : threadInfoArray) {
            System.out.println(threadInfo.getThreadName());
        }
        System.out.println("主线程结束");

    }
}
